// 多个异步请求 如何同时获取最终结果
let fs = require('fs'); // file system
//1.计数器方式
// let index = 0;  
// const cb = () =>{
//     if(++index === 2){
//         console.log(school)
//     }
// }

//2.闭包方式
let school = {}
function after(times,callback){
    return function(){ //  闭包函数  函数的定义的作用域和函数执行的作用 不在同一个作用域下
      if(--times == 0){
            callback();
        }
    }
}
//多个请求并发，靠计数器解决，都执行完再返回
//这个方法，会在所有异步执行之后执行
let cb = after(2,function () {
    console.log(school)
});
//vscode是从根目录开始找，终端是从当前文件目录找
fs.readFile('./promise/name.txt','utf8',function (err,data) {
  school.name = data;
  cb();
})
fs.readFile('./promise/age.txt','utf8',function (err,data) {
  school.age = data;
  cb();
});

//3.闭包方式2
function after2(times,callback){
  let result = {};
    return function(key,data){
      result[key] = data; 
      if(--times == 0){
            callback(result);
        }
    }
}
let cb2 = after2(2,function (result) {
  console.log(result)
});
fs.readFile('./promise/name.txt','utf8',function (err,data) {
  cb2('name',data);
})
fs.readFile('./promise/age.txt','utf8',function (err,data) {
  cb2('age',data);
});